/**
Basic services that all components must implement
*/
namespace java hydrap2p
namespace py hydrap2p
namespace csharp hydrap2p

/**
Stores the location of a certain service
*/
struct ServiceLocation {
	1: string address,	// can be hostname or ip address, or even possibly ipv6
	2: i32 port,		// signed int, so it must be at least 17 bits to store the 65535 addresses
}

service Service {
	/**
		Simply returns, without doing anything
	*/
	void ping(),
	
	/**
		Returns a list of supported interfaces that this Service implements
		This list is the exact name of the Thrift Service that it implements
		All services should include Service in this list, though it should not be strictly necessary
		This name becomes important for listeners. They must include the name of their implemented Listener Service or else the server will not subscribe them 
	*/
	list<string> supportedInterfaces(),
}
